package com.dotools.toutiaolibrary;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Looper;
import android.util.Log;

import com.bykv.vk.openvk.LocationProvider;
import com.bykv.vk.openvk.TTCustomController;
import com.bykv.vk.openvk.TTVfConfig;
import com.bykv.vk.openvk.TTVfConstant;
import com.bykv.vk.openvk.TTVfManager;
import com.bykv.vk.openvk.TTVfSdk;


/**
 * 可以用一个单例来保存TTAdManager实例
 */
public class TTManagerHolder {
    public static TTVfManager get() {
        if (!TTVfSdk.isInitSuccess()) {
            return null;
        }
        return TTVfSdk.getVfManager();
    }


    public static void doInit(final Context context, final String appid, final boolean isDebug) {
        doInit(context,appid,isDebug,true,true);
    }

    /**
     * 初始化
     * @param context 上下文
     * @param appid   穿山甲appid
     * @param isDebug 是否打开debug模式
     */
    public static void doInit(final Context context, final String appid,  boolean isDebug,boolean canUseLocation,boolean aList) {
        if (!TTVfSdk.isInitSuccess()) {
            if (Looper.getMainLooper() != Looper.myLooper()) {
                throw new RuntimeException("Need TTManagerHolder.init in main thread");
            }
            TTVfSdk.init(context, buildConfig(context, appid, isDebug,canUseLocation,aList), new TTVfSdk.InitCallback() {
                @Override
                public void success() {
                    Log.d("TTManagerHolder", "success");
                }

                @Override
                public void fail(int i, String s) {
                    Log.e("TTManagerHolder", "Error: code=" + i + "  msg=" + s);
                }
            });
        }
    }

    public static boolean  getInitSuccess(){
        return  TTVfSdk.isInitSuccess();
    }

    private static String getAppName(Context context) {
        try {
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
            int labelRes = packageInfo.applicationInfo.labelRes;
            return context.getResources().getString(labelRes);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    private static TTVfConfig buildConfig(Context context, String appid, boolean isDebug,boolean canUseLocation,boolean aList) {
        return new TTVfConfig.Builder()
                .appId(appid)
                .useTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景，可以使用TextureView
                .appName(getAppName(context))
                .titleBarTheme(TTVfConstant.TITLE_BAR_THEME_DARK)
                .allowShowNotify(true) //是否允许sdk展示通知栏提示
                .debug(isDebug) //测试阶段打开，可以通过日志排查问题，上线时去除该调用
//        若开发者想设置在任何网络下都有二次确认弹窗，那么可以调用此方法，不传递任何参数即可实现。
//        若开发者想设置在任何网络下都直接下载，那么可以不调用此方法，默认所有网络都可直接下载
//                .directDownloadNetworkType(TTVfConstant.NETWORK_STATE_WIFI, TTVfConstant.NETWORK_STATE_4G, TTVfConstant.NETWORK_STATE_5G) //允许直接下载的网络状态集合
                .supportMultiProcess(true)
                .needClearTaskReset()
                .customController(new TTCustomController() {
                    /**
                     * 是否允许SDK主动使用地理位置信息
                     *
                     * @return true可以获取，false禁止获取。默认为true
                     */
                    @Override
                    public boolean isCanUseLocation() {
                        return canUseLocation;
                    }

                    /**
                     * 当isCanUseLocation=false时，可传入地理位置信息，穿山甲sdk使用您传入的地理位置信息
                     *
                     * @return 地理位置参数
                     */
                    @Override
                    public LocationProvider getTTLocation() {
                        return super.getTTLocation();
                    }



                    @Override
                    public boolean alist() {
                        return aList;
                    }

                    /**
                     * 是否允许SDK主动使用手机硬件参数，如：imei
                     * @return true可以使用，false禁止使用。默认为true
                     */
                    @Override
                    public boolean isCanUsePhoneState() {
                        return super.isCanUsePhoneState();
                    }

                    /**
                     * 当isCanUsePhoneState=false时，可传入imei信息，穿山甲sdk使用您传入的imei信息
                     *
                     * @return imei信息
                     */
                    @Override
                    public String getDevImei() {
                        return super.getDevImei();
                    }

                    /**
                     * 是否允许SDK主动使用ACCESS_WIFI_STATE权限
                     *
                     * @return true可以使用，false禁止使用。默认为true
                     */
                    @Override
                    public boolean isCanUseWifiState() {
                        return super.isCanUseWifiState();
                    }

                    /**
                     * 是否允许SDK主动使用WRITE_EXTERNAL_STORAGE权限
                     *
                     * @return true可以使用，false禁止使用。默认为true
                     */
                    @Override
                    public boolean isCanUseWriteExternal() {
                        return super.isCanUseWriteExternal();
                    }

                    /**
                     * 开发者可以传入oaid
                     *  信通院OAID的相关采集——如何获取OAID：
                     1. 移动安全联盟官网http://www.msa-alliance.cn/
                     2. 信通院统一SDK下载http://msa-alliance.cn/col.jsp?id=120
                     * @return oaid
                     */
                    @Override
                    public String getDevOaid() {
                        return super.getDevOaid();
                    }
                })
                .build();
    }
}
